﻿using System.Runtime.InteropServices;

namespace WindowsAPI.Hooks
{
    [StructLayout(LayoutKind.Sequential)]
    public class ShellExecuteInfo
    {
        /// <summary>Размер структуры в байтах</summary>
        public int cbSize;
        /// <summary>Комбинация флагов указывающая на содержание других членов структуры, описание флагов можно посмотреть в MSDN</summary>
        public int fMask;
        /// <summary>Дескриптор окна любого сообщения, которое система может показать в результате обработки этого объекта</summary>
        public int hWnd;
        /// <summary>Описывает действие, которое нужно выполнить, например: "open", "edit", "explore"</summary>
        [MarshalAs(UnmanagedType.LPWStr)]
        public string lpVerb;
        /// <summary>Имя файла или объекта</summary>
        [MarshalAs(UnmanagedType.LPWStr)]
        public string lpFile;
        /// <summary>Список параметров</summary>
        [MarshalAs(UnmanagedType.LPWStr)]
        public string lpParameters;
        /// <summary>Имя рабочей директории, если поле не заполнено, это означает, что текущая директория является рабочей</summary>
        [MarshalAs(UnmanagedType.LPWStr)]
        public string lpDirectory;
        /// <summary>
        /// Комбинация флагов указывающая как должно отобразиться окно приложения, 
        /// обрабатывающего данный тип объектов (файлов), за списком желающие могут обратиться в MSDN
        /// </summary>
        public int nShow;
        /// <summary>
        /// По окончании обработки, расширение может установить одно из допустимых значений, 
        /// информирующее оболочку о результате обработки. Например, 
        /// SE_ERR_FNF - файл не найден, SE_ERR_PNF- путь на найден и т.п.
        /// </summary>
        public int hInstApp;
        public int lpIDList;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string lpClass;
        public int hkeyClass;
        public int dwHotKey;
        public int hIcon;
        public int hProcess;
    }
}